package util.tool.log;

import util.util.DevComUtil;
import util.util.DevLogUtil;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;
import java.util.HashMap;
import java.util.Map;


/**
 * 文件变化监听器
 * <p>
 * 在Apache的Commons-IO中有关于文件的监控功能的代码. 文件监控的原理如下：
 * 由文件监控类FileAlterationMonitor中的线程不停的扫描文件观察器FileAlterationObserver，
 * 如果有文件的变化，则根据相关的文件比较器，判断文件时新增，还是删除，还是更改。（默认为1000毫秒执行一次扫描）
 */
public class FileListener extends FileAlterationListenerAdaptor {

//    public long length = 0;
    Map<File, Long> lengthMap = new HashMap<>();

    /**
     * 文件创建修改
     */
    @Override
    public void onFileChange(File file) {
        Long length = lengthMap.get(file);
        long len = file.length();
        if (length == null || length == 0) {
            length = len;
            lengthMap.put(file, len);
        }
        // 提取日志String
        String fileStr = DevLogUtil.getFileStr(file, length);
        if (!DevComUtil.isEmpty(fileStr)) {
            boolean printParam = false;
            // 从日志中提取sql
            String s = DevLogUtil.printLog2(fileStr, printParam);
            if (!DevComUtil.isEmpty(s)) {
                System.out.print(s);
            }
        }
        lengthMap.put(file, len);
    }

    @Override
    public void onStart(FileAlterationObserver observer) {
        super.onStart(observer);
    }

    @Override
    public void onStop(FileAlterationObserver observer) {
        super.onStop(observer);
    }

}
